import openpyxl
import docx

# 把表格第row行内容加入一个集合中
def rowDataSet(ws,row):
    
    #创建一个新集合
    rowSet=set()

    for cell in ws[row-1]:
        #单元格不为空,把内容加入集合
        if cell.value not in [None,'']:
            rowSet.add(cell.value)

    return rowSet

# 删除最后一个空行
def remove_row(table,row):
    tbl=table.tbl
    tr=row._tr
    tbl.move(tr)

# 输出第一个表格
def exportDataToWordTable(ws,excelRow,doc,analysis):
    
    # 画word里面的表格(两行七列)
    docRows=2
    docCols=7
    table=doc.add_table(rows=docRows,cols=docCols,style='Table Grid')

    # word里面的表格是从0开始
    # excel数据填入word表格1里
    for row in range(docRows):
        for col in range(docCols):
            #word的text要求是字符串,但excel的value不一定是字符串类型,所以要类型转换
            table.rows[row].cells[col].text=str(ws.cell(row=row+1,column=col+1))

        # excel行指针向下移
        excelRow+=1

    #改变word每次进行数据分析时,第一个表格中第一行表格数据
    table.rows[0].cells[0].text=''#第一列数据不填会输入None,不好看,所以要改为空白
    table.rows[0].cells[1].text='票房'
    table.rows[0].cells[2].text='天数'
    table.rows[0].cells[3].text='票房/天数'

    #改变word每次进行数据分析时,第一个表格中第二行第四列数据经计算后，保留小数点后三位
    #计算时,要把字符串类型转化为float类型,再转化成字符串类型
    table.rows[1].cell[3].text='{:.3f}'.format(float(table.rows[1].cells[1].text)/float(table.rows[1].cells[2].text))

    #数据分析,保存结果
    if float(table.rows[1].cells[4].text)>0.85 and float(table.rows[1].cells[5].text)>0.85:
        analysis['direction']='南'
    else:
        analysis['direction']='北'
    
    if float(table.rows[1].cells[6].text)<0.2:
        analysis['feeling']='凉'
    else:
        analysis['feeling']='暖'

    # 跳过factor_loading那行
    excelRow+=1 

    # 创建一个新集合
    vSet=set()

    # factor_loading到alpha这一列的数据放到vSet集合里
    while str(ws.cell(row=excelRow,column=2).value)!='alpha':
        v=ws.cell(row=excelRow,column=2).value
        vSet.add(abs(v))
        excelRow+=1

    if min(vSet)>0.3:
        analysis['season']='夏'
        analysis['duration']='长'
    else:
        analysis['season']='冬'
        analysis['duration']='短'

    #一二表格间加一空行
    doc.add_paragraph('\n')

    return excelRow,analysis

# 输出第二个表格
def exportDataToWordTable2(ws,excelRow,doc,analysis):
    
    docCols=2
    # 一行一行往word里面添加表格2的数据
    table=doc.add_table(rows=1,cols=docCols,style='Table Grid')
    wordRow=0 # word表格里的行指针

    # excelRow从alpha这一行开始,到X这一行结束.从excel一行一行取数据,填入word表格
    # docCol为word表格里的列指针
    while ws.cell(row=excelRow,column=1).value!='x':
        for docCol in range(docCols):
            table.rows[wordRow].cells[docCol].text=str(ws.cell(row=excelRow,column=docCol+1).value)
        wordRow+=1
        excelRow+=1
        
        # 给表格添加空行
        rowObj=table.add_row()

    #删除最后一个空行
    remove_row(table,rowObj)

    # 记录alpha的值,并进行分析
    analysis['alpha']=float(table.rows[1].cells[1].text)

    if analysis['alpha']>0.8:
        analysis['climate']='炎热'
    else:
        analysis['climate']='严寒'

    # 添加空行
    doc.add_paragraph('\n')

    return excelRow,analysis

# 输出第三个表格
def exportDataToWordTable3(ws,excelRow,doc):
    
    # 首先确定行列
    docCols=len(rowDataSet(ws,excelRow))

    # word里画出表格
    table=doc.add_table(rows=docCols,cols=docCols,style='Table Grid')

    # 提取excel数据填入word表格3
    for docRow in range(docCols):
        for docCol in range(docCols):
            table.rows[docCol].cells[docCol].text=str(ws.cell(row=excelRow,column=docCol+1).value)
        excelRow+=1

    doc.add_paragraph('\n')

    return excelRow

# 文字输出(对表格数据的分析)
def textOutput(doc,analysis):
    
    outputStr='"人皆苦{},我爱{}日{}.\n熏风自{}来,殿阁生微{}.\nalpha={}"'.format(analysis['climate'],analysis['season'],analysis['duration'],analysis['direction'],analysis['feeling'],analysis['alpha'])
    
    p=doc.add_paragraph(outputStr)
    p.add_run('\n')

    doc.add_paragraph('-*-'*33)
    doc.add_page_break()

wb=openpyxl.load_workbook('data.xlsx')
ws=wb['Sheet 1']

doc=docx.Document()

dataAnalysis={'direction':'',
              'feeling':'',
              'season':'',
              'duration':'',
              'climate':'',
              'alpha':0}

#前排说明:
#    word里的表格是从0开始的,excel里的表格是从1开始的

#初始化excel行指针
row=1

while row<ws.max_row:
    if {'TLI','CHI','RMSEA'}<rowDataSet(ws,row):

        #输出第一张表,记录数据分析结果
        row,dataAnalysis=exportDataToWordTable(ws,row,doc,dataAnalysis)

        #输出第二张表,记录数据分析结果
        row,dataAnalysis=exportDataToWordTable2(ws,row,doc,dataAnalysis)

        #输出第三张表，记录数据分析结果
        row=exportDataToWordTable3(doc,dataAnalysis)

    #指针向下移动
    row+=1

doc.save('analysisResult.docx')